package com.mikufufu.blog.model.vo.api;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.mikufufu.blog.model.vo.admin.ArticleVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 文章
 */
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class ArticleApiVO  implements Serializable {

    @ApiModelProperty(value = "文章id")
    private Integer id;

    /**
     * 文章标题
     */
    @ApiModelProperty(value = "文章标题")
    private String title;

    /**
     * 作者用户id
     */
    @ApiModelProperty(value = "作者用户id")
    private Integer userId;

    /**
     * 文章封面链接
     */
    @ApiModelProperty(value = "文章封面链接")
    private String imgUrl;

    /**
     * 文章梗概
     */
    @ApiModelProperty(value = "文章梗概")
    private String articleOverview;

    /**
     * 文章正文
     */
    @ApiModelProperty(value = "文章正文")
    private String articleContent;

    /**
     * 发布日期
     */
    @ApiModelProperty(value = "发布日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date publishDate;

    /**
     * 文章分类id
     */
    @ApiModelProperty(value = "文章分类id")
    private Integer categoryId;

    /**
     * 文章创建时间
     */
    @ApiModelProperty(value = "文章创建时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 更新时间
     */
    @ApiModelProperty(value = "更新时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 文章状态(0.显示,1.隐藏,2.密码查看)
     */
    @ApiModelProperty(value = "文章状态(0.显示,1.隐藏,2.密码查看)")
    private Integer status;

    /**
     * 分类名称
     */
    @ApiModelProperty(value = "分类名称")
    private String categoryName;

    /**
     * 分类图标
     */
    @ApiModelProperty(value = "分类icon")
    private String categoryIcon;

    /**
     * 分类图标颜色
     */
    @ApiModelProperty(value = "icon颜色")
    private String iconColor;

    /**
     * 用户头像URL
     */
    @ApiModelProperty(value = "用户头像")
    private String userAvatar;

    /**
     * 用户昵称
     */
    @ApiModelProperty(value = "用户名称")
    private String userName;

    /**
     * 文章标签名称列表
     */
    @ApiModelProperty(value = "标签名称")
    private List<String> tagNames;

    /**
     * 文章类型（1-普通文章，2-合集）
     */
    @ApiModelProperty(value = "文章类型(1.普通文章，2.合集)")
    private Integer type;

    // 合集文章详情字段

    /**
     * 合集文章ID
     */
    @ApiModelProperty(value = "合集id")
    private Integer collectionId;

    /**
     * 合集名称
     */
    @ApiModelProperty(value = "合集名称")
    private String collectionName;

    /**
     * 合集封面图片URL
     */
    @ApiModelProperty(value = "合集封面")
    private String collectionImgUrl;

    /**
     * 合集简介描述
     */
    @ApiModelProperty(value = "合集描述")
    private String collectionOverview;

    /**
     * 合集创建时间（格式：yyyy-MM-dd HH:mm:ss）
     */
    @ApiModelProperty(value = "合集创建时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date collectionCreateTime;

    /**
     * 上一篇关联文章信息（排除循环引用字段）
     */
    @ApiModelProperty(value = "上一篇文章的信息")
    @JsonIgnoreProperties({"preArticle", "nextArticle"})
    private ArticleVO preArticle;

    /**
     * 下一篇关联文章信息（排除循环引用字段）
     */
    @ApiModelProperty(value = "下一篇文章的信息")
    @JsonIgnoreProperties({"preArticle", "nextArticle"})
    private ArticleVO nextArticle;

    /**
     * 文章排序权重值
     */
    @ApiModelProperty(value = "排序")
    private Integer orderNum;

    /**
     * 文章累计浏览次数
     */
    @ApiModelProperty(value = "浏览量")
    private Integer viewCount;

    /**
     * 文章累计点赞数量
     */
    @ApiModelProperty(value = "点赞量")
    private Integer likeCount;

    /**
     * 是否置顶标识（0-否，1-是）
     */
    @ApiModelProperty(value = "是否置顶(0.否 1.是)")
    private Integer isTop;

    private static final long serialVersionUID = 1L;
}
